Problem Link
https://leetcode.com/problems/combination-sum-iv
How to solve
Create a dp array of size target + 1. dp[i] represents the number of combinations of numbers in nums that add up to i.
For every i, iterate through nums and add to dp[i] the number of combinations that add up to i - num (i.e. dp[i - num]).
Complexity Analysis
Time: O(target * len(nums))
We calculate the possible number of combinations for 0, 1, ..., target. For every number i, we iterate through every number in nums and see if we can add the number of combinations that add up to i = num.
Space: O(target)
The dp array is of size target + 1.
Solutions
Python
def combinationSum4(self, nums: List[int], target: int) -> int: dp = [0 for _ in range(target + 1)] dp[0] = 1 for i in range(1, target + 1): for num in nums: if i - num >= 0: dp[i] += dp[i - num] return dp[-1]
Go
func combinationSum4(nums []int, target int) int { dp := make([]int, target + 1) dp[0] = 1 for i := 1; i < target + 1; i++ { for _, num := range nums { if i - num >= 0 { dp[i] += dp[i - num] } } } return dp[target] }
Rust
pub fn combination_sum4(nums: Vec<i32>, target: i32) -> i32 { let mut dp = vec![0; (target + 1) as usize]; dp[0] = 1; for i in 1..target + 1 { for num in &nums { if i - num >= 0 { dp[i as usize] += dp[(i - num) as usize]; } } } dp[target as usize] }